import axios from "axios";
import { Toast } from "vant";
import { encrypt } from "./help";
const MODE = import.meta.env.MODE;
// 创建一个 axios 实例
const service = axios.create({
  baseURL: MODE == "production" ? "/" : "/api", // 所有的请求地址前缀部分
  // baseURL: 'http://192.168.121.111', // 设置本地请求的基础URL
  timeout: 60000, // 请求超时时间毫秒
  withCredentials: true, // 异步请求携带cookie
  headers: {
    // 设置后端需要的传参类型
    "Content-Type": "application/json",
    "X-Requested-With": "XMLHttpRequest",
  },
});

// 添加请求拦截器
service.interceptors.request.use(
  function (config) {
    let token = sessionStorage.getItem("token") || "";
    let lang = localStorage.getItem("lang") || "zh";
    if (token) {
      config.headers["authorization"] = `bearer${token}`;
      config.headers["lang"] = lang;

      if (config?.customHeaders) {
        config.headers = {
          ...config.headers,
          ...config.customHeaders,
        };
        delete config.customHeaders;
      }

      config.data = {
        ...eval(config.data),
        authorization: config.headers["authorization"],
      };
    } else {
      config.data = {
        ...eval(config.data),
      };
    }

    !config.customLoading &&
      Toast.loading({
        message: config.loadingMsg,
        forbidClick: true,
        duration: 0,
      });
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    console.log(error);
    Toast.clear();
    return Promise.reject(error);
  }
);

// 添加响应拦截器
service.interceptors.response.use(
  function (response) {
    let { code } = response.data;
    if (code == "10001") {
      localStorage.clear();
      sessionStorage.clear();
      // location.hash = "/pageVerify";
      Toast.clear();
      return false;
    } 
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // dataAxios 是 axios 返回数据中的 data
    const dataAxios = response.data;
    // 这个状态码是和后端约定的
    // const code = dataAxios.reset;
    return dataAxios;
  },
  function (error) {
    Toast.clear();
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.log(error);
    Toast({
      message: "网络请求错误~",
      position: "top",
    });
    return Promise.reject(error);
  }
);

export default service;
